Today's computer systems often include multi-threaded processors that execute independent instruction streams. A software program executing on a hardware thread may request control of a different hardware thread (assist thread), such as for prefetching data, performing calculations, executing not-yet-taken branches speculatively, or executing a particular subroutine. When hardware resources are available, the assist thread initiates and commences code execution. At times, the assist thread may terminate prematurely due to factors such as software code quality or processor thread prioritization.